﻿using System.Collections.Generic;
using NHibernate;
using Neturion.Dados;
using Neturion.IRepositorios;

namespace Neturion.Repositorios
{
    public class RepositorioSistemaPerfil : IRepositorioSistemaPerfil
    {
        public SistemaPerfil Inserir(SistemaPerfil sistemaPerfil)
        {
            GerenciadorBDConfigs.Instance.SessaoAtual().Save(sistemaPerfil);
            return sistemaPerfil;
        }

        public SistemaPerfil Atualizar(SistemaPerfil sistemaPerfil)
        {
            SistemaPerfil tmpSistemaPerfil = ObterPorId(sistemaPerfil.SistemaPerfilId);
            // Atribuicao dos valores do objeto da memoria para o objeto obtido no banco de dados
            tmpSistemaPerfil.Perfil = sistemaPerfil.Perfil;
            tmpSistemaPerfil.Sistema = sistemaPerfil.Sistema;
            tmpSistemaPerfil.ListaTelaAcaoPadrao.Clear();
            foreach (TelaAcao telaAcao in sistemaPerfil.ListaTelaAcaoPadrao)
            {
                tmpSistemaPerfil.AdicionarTelaAcao(telaAcao);
            }

            GerenciadorBDConfigs.Instance.SessaoAtual().Merge(tmpSistemaPerfil);
            return tmpSistemaPerfil;
        }

        public void Excluir(SistemaPerfil sistemaPerfil)
        {
            GerenciadorBDConfigs.Instance.SessaoAtual().Delete(sistemaPerfil);
        }

        public IList<SistemaPerfil> ObterTodos()
        {
            ICriteria criteria = GerenciadorBDConfigs.Instance.SessaoAtual().CreateCriteria(typeof(SistemaPerfil));
            return criteria.List<SistemaPerfil>() as List<SistemaPerfil>;
        }

        public SistemaPerfil ObterPorId(int id)
        {
            return GerenciadorBDConfigs.Instance.SessaoAtual().Get<SistemaPerfil>(id);
        }
    }
}